程式流程控制 是寫程式的一個關鍵概念,它 控制執行流程和順序。通過使用各種 控制結構 和 條件語句,决定哪些程式碼會被執行,以及它們被執行的次數。主要目的是使程序能夠根據不同條件執行不同的操作,以滿足特定的需求和邏輯。
If…elif…else (若…或若是…否則…) :
條件
決定執行哪一段程式碼。比較 Operator
和 邏輯 Operator
來寫成def get_grade(score):
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
return grade
print(get_grade(95)) # 會進入 score >= 90 的範圍執行
print(get_grade(70)) # 會進入 score >= 70 的範圍執行
print(get_grade(50)) # 會進入 else 的範圍執行
Output:
A
C
F
Match…case… (…符合…情況時)
def switch_case(value):
match value:
case 1:
print("Case 1")
case 2:
print("Case 2")
case _:
# 在未匹配到任何 case 時執行的程式碼
print("Default Case")
# 測試
switch_case(2)
switch_case(4)
Output:
Case 2
Default Case
Python 主要有 2 種 迴圈: For Loop 和 While Loop
For loop (每…執行…)
基本寫法:
for variable in iterator:
statement1
範圍: Python 內建 function range() 可取得迭代的範圍
有三種寫法:
range(stop):會從 0 開始迭代至 stop 前的值
I.e. range(5) 則為 0, 1, 2, 3, 4
range(start, stop) : 會從 start 的值開始迭代至 stop 前的值
I.e. range(2, 5) 則為 2, 3, 4
range(start, stop, step) : 會從 start 的值開始迭代至 stop 前的值,每次遞增/減 step 的值
I.e. range(0, 10, 2) 則為 0, 2, 4, 6, 8
I.e. range(10, 0, -2) 則為 10, 8, 6, 4, 2
def num_sum(end_num):
total = 0
for num in range(1, end_num):
# 每次 total 都會與 num 的值相加
total += num
return total
def odd_sum(end_num):
odd_total = 0
for odd_num in range(1, end_num, 2):
odd_total += odd_num
return odd_total
print(f"總和: {num_sum(10)}") # 結果應為 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45
print(f"奇數總和: {odd_sum(10)}") # 結果應為 1 + 3 + 5 + 7 + 9 = 25
Output:
總和: 45
奇數總和: 25
string : 字串的每個字符是可以被迭代的
str = "Hello"
for char in str:
print(char)
Output:
H
e
l
l
o
list 和 dict 的 keys (這部分會在下一篇文章說明)
While Loop (當...執行…)
while <condition>
比較 Operator
和 邏輯 Operator
寫成執行 while loop 的條件,在符合條件的情況下會執行一次內容,直到條件不符為止。counter = 1
# 當 counter 為 1 或 2 時,會執行迴圈來容
while counter == 1 or counter == 2:
print(counter)
# counter 的值會在每次執行時 +1
counter += 1
Output:
1
2
For Loop 和 While Loop 都是讓一些程式碼重覆執行,在不同的情況下,需要選用不同的 Looping 方法。
像是以下例子:
小明的薪水為 50000,每年增加 4%,計算 10 年後他的薪水是多少?
(已知需要執行 10 次,所以會選用 For Loop)
小時的薪水為 50000,每年增加 4%,計算多少年後,他的薪水會變 2 倍?
(不知道需要執行多少次,但知道結束的條件為薪水達到 2 倍的時候,選用 While)
剛好可以作為練習,試著寫寫看。
應用 While Loop 的時候更需要注意會否出現 無窮迴圈 的情況
While Loop 所設定的條件永遠都符合時,迴圈則會不斷執行,永無終結,這樣會讓程式無法執行結束。這時只>能用 Ctrl + C 來停止執行。
因此下條件的時候必須要小心。
在 Looping 的課題,額外需要學習的還有 Break
和 Continues
Break: 強制離開迴圈,在迴圈結束前,可以因應某些情況判斷是否要中斷迴圈。
for i in range(1, 6):
# 本應會執行 5 次,i 分別為 1, 2, 3, 4, 5
if i == 3:
# 但如 i 為 3 時,會直接中斷迴圈
break
print(i)
Output:
1
2
Continues: 在某些情況下,迴圈內不需要執行任何動作,會使用 Continues 以結束這次的迴圈,跳到下一個。
for i in range(1, 6):
if i == 3: # 如 i = 3 的時候,會執行以下程式
continue # 會結束當下這次的執行,迭代到下一個 i(即為 4),continue 後面的程式碼不會執行
print(i)
Output:
1
2
4
5
6
在其他語言像是 JAVA 會有 Do…While…迴圈,這其實跟 While Loop 相似,只是 Do While 會強制至少先執行一次迴圈內容,條件符合才重覆執行下一次。而 Python 的世界裡沒有 Do … While…,但應用 While Loop 亦可以做到類似效果。
count = 0 # While True 使必然要執行一次 While True: # 在這裡執行循環內的程式碼 count += 1 # 檢查條件,決定是否繼續執行迴圈 if count > 10 break
執行程式的過程,發生一些非預期的結果,系統會跳出例外 (Throw Exception),會直接終止,不再執行後面的程式碼。如果不想程序終止,使用 Try Except 可以抓住例外,作處理後會繼續執行後續的程式碼。
Exception 有很多種,可以針對不同類型的 Exception 作不一樣的處理。
Exception Handling 的應用:
try:
# Try Statement 有可能出現錯誤的程式碼
except [exceptionType [as variable]]:
# Except Statement 拋出例外時需要執行的程式碼
[else:
# Else Statement 沒有出現錯誤才會執行的程式碼 (Optional) ]
[finally:
# Finally Statement 不管有沒有出錯都會執行的程式碼 (Optional) ]
例子:
def ten_divided_by(num):
try:
# 試圖執行可能引發異常的程式碼
result = 10 / num # 這個有機會引發 除以 0 的異常
except ZeroDivisionError:
# 處理特定類型的異常
print("ZeroDivisionError occured.")
else:
# 當沒有異常時執行
print(f"No Exception. The result is {result}")
finally:
# 無論是否發生異常都要執行
print("--- Finally Finished ---")
ten_divided_by(0)
ten_divided_by(10)
Output:
ZeroDivisionError occured.
--- Finally Finished ---
No Exception. The result is 1.0
--- Finally Finished ---
除了系統遇到錯誤會自動引發例外,也可以自行強制引發指定的例,可使用 raise <Error>
。
divider = 0
if divider == 0:
raise ZeroDivisionError
Output:
Traceback (most recent call last):
File "<file_path>", line 3, in <file_name>
raise ZeroDivisionError
ZeroDivisionError
程式流程控制使程序能夠根據不同的條件和數據来執行不同的操作,允許你編寫靈活和功能強大的程序,從而實現更複雜的邏輯和功能。
介紹一個網站有蠻多基礎應用的例子,可以參考看看: https://www.programiz.com/python-programming/examples
Match…case… 例子中的縮排沒做好喔
def switch_case(value):
match value:
case 1:
print("Case 1")
case 2:
print("Case 2")
case _:
# 在未匹配到任何 case 時執行的程式碼
print("Default Case")
# 測試
switch_case(2)
switch_case(4)
謝謝提醒,跑掉了,已修改